package com.cll.netty.netty.codec2;

import java.util.Random;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;

public class NettyClientHandler extends ChannelInboundHandlerAdapter {

    // 当通道就绪就会触发此方法
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {

        System.out.println("-----进入客户端handler-----");
        // 随机发送student或者worker对象
        int random = new Random().nextInt(3);
        MyDataInfo.MyMessage myMessage = null;

        if(0 == random){ // 发送Student对象
            myMessage = MyDataInfo.MyMessage.newBuilder()
                    .setDataType(
                            MyDataInfo.MyMessage.DataType.StudentType
                    ).setStudent(
                            MyDataInfo.Student.newBuilder()
                                    .setId(5)
                                    .setName("玉麒麟 卢俊义")
                    ).build();

        }else{
            myMessage = MyDataInfo.MyMessage.newBuilder()
                    .setDataType(
                            MyDataInfo.MyMessage.DataType.WorkerType
                    ).setWorker(
                            MyDataInfo.Worker.newBuilder().setAge(15).setName("老李")
                    ).build();
        }


        ctx.writeAndFlush(myMessage);
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        ByteBuf buf = (ByteBuf)msg;
        System.out.println("服务器回复的消息：" + buf.toString(CharsetUtil.UTF_8));
        System.out.println("服务器的地址" + ctx.channel().remoteAddress());
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        ctx.close();
    }
}
